import re
def replace_placeholders(sql: str, params: list) -> str:
    """
    将 SQL 字符串中的每个 '?' 按 params 列表中的顺序依次替换。
    如果 params 数量不足，抛出 ValueError。
    """
    if sql.count("?") != len(params):
        raise ValueError("参数数量与占位符数量不匹配")

    parts = sql.split("?")
    # 把 params 中的每个元素转成字符串，并转义单引号
    escaped = [str(p).replace("'", "''") for p in params]
    # 交替拼接
    result = parts[0]
    for i, p in enumerate(escaped):
        result += f"'{p}'" + parts[i + 1]
    return result


# 读取sql文件
with open("query.sql", encoding="utf-8") as f:
    sql = f.read()
param_str = ""
param_list = param_str.split(",")

pattern = re.compile(r"\s*\(.*?\)\s*$")  # 匹配末尾的 (xxx) 及前后空白
clear_param_list = [pattern.sub("", s) for s in param_list]

print(replace_placeholders(sql, clear_param_list))

file_path = "query_output.sql"
with open(file_path, mode="w", encoding="utf-8") as f:
    f.write(replace_placeholders(sql, clear_param_list))

